電腦是一堆電路的組合,有通電代表1,沒通電代表0,只靠1與0這兩個數字形成二進位符號便讓電腦產生無限可能。在早期Computer還是Computer,電腦還只是計算機的時代,電腦只是為了幫我們做數學計算的工具,例如電影上演的破解密碼、計算登月軌道等等,對於何謂程式,科學家給我們的答案是,演算法 + 資料結構 = 程式 。 有資料又知道如何計算,那就可以寫程式。最早出現的程式語言是像組合語言一樣這種低階語言,要撰寫程式的科學家要熟知電腦每個運算步驟才能撰寫程式,程式撰寫完還要拿起手冊逐字翻譯成機器語言輸入至電腦執行。後來編譯器的出現,這種人工翻譯的工作正式消失,程式語言開始有大大的發展,雖然我們撰寫的程式仍然最後會被翻譯成機器語言,但是高階語言的出現讓人更容易閱讀、更容易理解、更好撰寫程式。
最初的程式語言撰寫起來是沒有區段的概念,程式從頭寫到尾一行一行地寫,電腦讀進去後一行一行的執行,沒有if{...}else{...}這樣方便的判斷式幫我們判斷要執行什麼工作,也沒有方便的while、for迴圈幫助我們重複執行一段程式碼,都是用goto或是jump這種跳躍符號,告訴電腦跳至哪一行繼續執行程式,像是流水帳一樣,當這個程式發生問題時,你不知道問題是發生在哪裡,像是麵條一樣,要重頭找到尾,而且程式一多,也是像一團麵一樣全部擠在一起。這種沒有區段的程式碼被戲稱為麵條式程式,就是現在我們稱為的非結構化程式。
我們說中繼語言是一種低階語言,現在我們仍能從IL中看到類似麵條式非結構程式語言的樣貌,撰寫以下程式並用ILSpy工具打開來看看
class Program
{
static void Main(string[] args)
{
int i = 123 ;
if (i == 123)
{
Console.WriteLine("123");
}
else
{
Console.WriteLine("不等於123");
}
}
}
例如:IL程式碼中,第IL_000b行中告訴我們若判斷結果是false就跳躍至IL_001c行去,而IL_001a告訴電腦執行完if就要跳過else部分。
要改善這樣的現象程式設計範式出現了,例如結構化程式語言的出現,提供我們{}、start end、縮排這種將程式包裝成區段的概念。這讓我們有if else then、while、for、function函式等等,程式碼被一個一個的包裝後,整個程式有清晰的結構與流程,不同步驟就呼叫不同函式來執行。而相對於原本沒有區段概念的程式語言,我們便稱為非結構程式語言。而結構化程式的function函式與變數一起包裝起來變成了物件,而這個物件就是物件導向的雛形。
時至今日雖然我們改用高階語言撰寫程式,但現在我們看到一份程式碼仍是重頭寫到尾,我們還是戲稱這是麵條式程式碼。